#pragma once
#include "Subject.h"
#include <string>
#include <iostream>
using namespace std;

class FishImpl {
	friend class FishFactory;
public:
	virtual void eat() = 0;
	virtual void debug() const;
	virtual void pausePlay() {swim = !swim;};
	virtual const string& getTypeStr() const {return type;};

	inline int getSize() const {return size;};
	inline bool isSwim() const {return swim;};
	inline int getSpeed() const {return speed;};
	inline bool isAlive() const {return alive;};
	inline double getDirection() const {return direction;};
	
protected:
	FishImpl();
	virtual ~FishImpl();
	void setType(const string& newType) {type = newType;};
	void setSize(int newSize) {size = newSize;};
	void setSwim(bool newSwim) {swim = newSwim;};
	void setSpeed(int newSpeed) {speed = newSpeed;};
	void setAlive(bool newAlive) {alive = newAlive;};
	void setDirection(double newD) {direction = newD;};
	
private:
	string type;
	int size;
	bool swim;
	int speed;
	bool alive;
	double direction;
};
